package Servicio;

import DAO.*;
import java.util.ArrayList;

import bean.*;
public class ServicioFacturacion{

        public static final int DB_TYPE = DAOFactura.SQL_SERVER;
	
	private ArrayList<Servicio> services = new ArrayList<Servicio>() ;
	private ArrayList<Contenedor> conts = new ArrayList<Contenedor>();
	private ArrayList<Proforma> proforms = new ArrayList<Proforma>();
	private ArrayList<Cliente> clients = new ArrayList<Cliente>();
	//private ArrayList<Factura> pagos= new ArrayList<Factura>();
        private ArrayList<Object> conte = new ArrayList<Object>();

        private ArrayList<Documento> documentos = new ArrayList<Documento>();
	
        //Servicios de Usuario        
        public int agregaUsuario(Usuario user){
            DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
            DAOUsuario daoUsuario = daoFactura.getDAOUsuario();
            return daoUsuario.insert(user);
        }
        
        public int queryIdPass(String id,String pass){
            DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
            DAOUsuario daoUsuario = daoFactura.getDAOUsuario();
            return daoUsuario.queryIdPass(id,pass);
            
        }
        
        
        
        public int eliminaUsuario(String id){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOUsuario daoUsuario = daofactura.getDAOUsuario();
            return daoUsuario.delete(id);
        }
        public int editaUsuario(Usuario user){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOUsuario daoUsuario = daofactura.getDAOUsuario();
            return daoUsuario.update(user);            
               
        }        
        
        public int editaServicio(Servicio serv){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOServicio daoServicio = daofactura.getDAOServicio();
            return daoServicio.update(serv);            
               
        }
         
        public float TotalFac(int id){
        DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOFacturacion daof = daofactura.getDAOFacturacion();
            return daof.TotalFac(id);     
        
        }
        
        public int editaContenedor(Contenedor cont){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOContenedor daocontenedor = daofactura.getDAOContenedor();
            return daocontenedor.updateCont(cont);
        
        }
        
         public int queryallFac(String idDoc){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOFacturacion daofacturacion = daofactura.getDAOFacturacion();
            return daofacturacion.queryallFac(idDoc);
        
        }
        
        
         public int editaCliente(Cliente c) {
       DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOCliente daocliente = daofactura.getDAOCliente();
            return daocliente.update(c);   
        
    }
        
        public ArrayList<Usuario> queryByName(String nombre){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOUsuario daoUsuario = daofactura.getDAOUsuario();
            return daoUsuario.queryByName(nombre);        
        }
        
        public Contenedor queryByContenedor(int id){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOContenedor daocontenedor = daofactura.getDAOContenedor();
            return daocontenedor.queryByContenedor(id);
        }
        
        public Usuario queryByUsuario(String id){        
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOUsuario daoUsuario = daofactura.getDAOUsuario();
            return daoUsuario.queryById(id);
        }
       
          public Servicio queryByServicio(String id){        
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOServicio daoServicio = daofactura.getDAOServicio();
            return daoServicio.queryByIdS(id);
        }
       
            public Cliente queryByCliente(String id) {
              DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
              DAOCliente clienteDAO = daofactura.getDAOCliente();
              return clienteDAO.queryByIdC(id);
            }
          
        
        public final ArrayList<Usuario> queryAllUsuarios(){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOUsuario daoUsuario = daofactura.getDAOUsuario();
            return daoUsuario.queryAll();
        }
        //Servicios de Servicio(lol)
        public int agregaServicio(Servicio serv){
	     DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
             DAOServicio servicioDAO = daoFactura.getDAOServicio();
             //services.add(serv);
             return servicioDAO.insert(serv);
        }
        
         public int agregaFactura(Factura f){
	     DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
             DAOFacturacion facturacionDAO = daoFactura.getDAOFacturacion();
             //services.add(serv);
             return facturacionDAO.agregaFactura(f);
        }
        
         public ArrayList<Servicio> queryAllServicios(){
            DAOFactura daoFactura = DAOFactura.createFactura(ServicioFacturacion.DB_TYPE);
            DAOServicio servicioDAO =  daoFactura.getDAOServicio(); //polimorfismo               
            return servicioDAO.queryAll(); 
        }
         
          
         
         public int eliminaServicio(String id){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOServicio daoServicio = daofactura.getDAOServicio();
            return daoServicio.delete(id);
         }
         //Servicios del Contenedor
        public int agregaContenedor(Contenedor cont){
            DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
            DAOContenedor contenedorDAO= daoFactura.getDAOContenedor();
            //conts.add(cont);
            return contenedorDAO.insertCont(cont);
        }
        
        public int eliminaContenedor(int id){
            DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOContenedor daoCont = daofactura.getDAOContenedor();
            return daoCont.deleteCont(id);
        }
        
        public int agregaDocXcont(int idDoc,int idCont){
            DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
            DAOContenedor contenedorDAO= daoFactura.getDAOContenedor();
            return contenedorDAO.insertContxDoc(idDoc,idCont);
        }
        
        public int agregaSerXcont(int idSer,int idCont){
            DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
            DAOServicio servicioDAO= daoFactura.getDAOServicio();
            return servicioDAO.insertServxCont(idSer, idCont);
        }
      
        public final ArrayList<Servicio> queryAllServxCont(int idCont){        
            DAOFactura daoFactura = DAOFactura.createFactura(ServicioFacturacion.DB_TYPE);
            DAOServicio servicioDAO = daoFactura.getDAOServicio();
            return servicioDAO.queryAllServxCont(idCont);
        }
       
                
         public final ArrayList<Servicio> queryAllSerxDoc(int idDoc){        
            DAOFactura daoFactura = DAOFactura.createFactura(ServicioFacturacion.DB_TYPE);
            DAOServicio servicioDAO = daoFactura.getDAOServicio();
            return servicioDAO.queryAllSerxDoc(idDoc);
        }
        
        
        public final ArrayList<Contenedor> queryAllContenedor(){
            DAOFactura daoFactura = DAOFactura.createFactura(ServicioFacturacion.DB_TYPE);
            DAOContenedor contenedorDAO = daoFactura.getDAOContenedor();
            return contenedorDAO.queryAllContenedor();            
        }
        public final ArrayList<Contenedor> queryAllContxDoc(int idDoc){        
            DAOFactura daoFactura = DAOFactura.createFactura(ServicioFacturacion.DB_TYPE);
            DAOContenedor contenedorDAO = daoFactura.getDAOContenedor();
            return contenedorDAO.queryAllContxDoc(idDoc);
        }        
        public final ArrayList<Cliente> queryAllClientes(){
            DAOFactura daoFactura = DAOFactura.createFactura(ServicioFacturacion.DB_TYPE);
            DAOCliente clienteDAO = daoFactura.getDAOCliente();
            return clienteDAO.queryAll();
            
        }
        //Servicios del Documento
        public final ArrayList<Documento> queryAllDocumento(){
            DAOFactura daoFactura = DAOFactura.createFactura(ServicioFacturacion.DB_TYPE);
            DAODocumento documentoDAO = daoFactura.getDAODocumento();
            return documentoDAO.queryAll();
        } 
        public int agregaDocumento(Documento doc){
            DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
            DAODocumento documentoDAO=daoFactura.getDAODocumento();
            return documentoDAO.insert(doc);
        } 
        public int eliminaDocumento(String id){
            DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
            DAODocumento documentoDAO=daoFactura.getDAODocumento();
            return documentoDAO.delete(id);        
        }
        
        //
	public void agregaProforma( Proforma proform){
		proforms.add(proform);
	}
	
	public int agregaCliente( Cliente client){
		DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
                DAOCliente clienteDAO= daoFactura.getDAOCliente();
		return  clienteDAO.agregarCliente(client);            
	}
	public int eliminaCliente(int id){
		DAOFactura daoFactura = DAOFactura.createFactura(DB_TYPE);
                DAOCliente clienteDAO= daoFactura.getDAOCliente();
		return  clienteDAO.delete(id);             
        }
	   
	
	public Object sacoContenedor(int id){
                Contenedor conteObtenido;
		for (int i=0; i<conte.size(); i++){
                    conteObtenido= (Contenedor)(conte.get(i));
                    if (conteObtenido.getId() == id) return conteObtenido;
                }
		return null;
	}
	
	public Proforma sacoProforma(int id){
		for (int i=0; i<proforms.size(); i++)
			if (proforms.get(i).getId() == id) return proforms.get(i);
		return null;
	}
	
	public Cliente sacoCliente(int id){
		for (int i=0; i<clients.size(); i++)
			if (clients.get(i).getId() == id) return clients.get(i);
		return null;
	}
	
	
        	 
        public Servicio sacoServicio( int id){
		for (int i=0; i<services.size(); i++)
			if (services.get(i).getId() == id) return services.get(i);
		return null;
	}
                
        public ArrayList<Object> queryAllObjectsContenedor(){
            return conte;
        }        
        public Servicio queryServicio(int id) {
            for (int i=0;i<services.size();i++)
                if (services.get(i).getId()==id)
                    return services.get(i);
           return null;
        }
        
         public Servicio queryServicioById(int idServicio) {
            for (int i=0;i<services.size();i++)
                if (services.get(i).getId()==idServicio)
                    return services.get(i);
           return null;
        }
	
// MODIFICAR	
		
              
    public void updateServicio(Servicio s) {
        
         for (int i=0; i<services.size(); i++){
                if (services.get(i).getId() == s.getId()){
                    Servicio pFound = services.get(i);
                    pFound.setId(s.getId());
                    pFound.setDescripcion(s.getDescripcion());
                    pFound.setPreciobase(s.getPreciobase());
                    pFound.setUnidadcobro(s.getUnidadcobro());
                    return;
                } 
            }
         }
	
	public void updateRefrigerados(Refrigerado cRefri){
        for (int i=0; i<conte.size();i++){
                if(((Refrigerado)(conte.get(i))).getId()== cRefri.getId()){
                    Refrigerado cFound=(Refrigerado)(conte.get(i));
                    cFound.setId(cRefri.getId());
                    cFound.setPeso_neto(cRefri.getPeso_neto());
                    cFound.setPeso_bruto(cRefri.getPeso_bruto());
                    cFound.setVolumen(cRefri.getVolumen());
                    cFound.setDescripcionMerc(cRefri.getDescripcionMerc());
                    cFound.setMotor(cRefri.getMotor());
                    cFound.setTemperatura(cRefri.getTemperatura());
                    return;
                }
        }
    }

    public void updateNoRefrigerado(NoRefrigerado cNoRefri){
        for (int i=0; i<conte.size();i++){
                if(((NoRefrigerado)(conte.get(i))).getId()== cNoRefri.getId()){
                    NoRefrigerado cFound=(NoRefrigerado)(conte.get(i));
                    cFound.setId(cNoRefri.getId());
                    cFound.setPeso_neto(cNoRefri.getPeso_neto());
                    cFound.setPeso_bruto(cNoRefri.getPeso_bruto());
                    cFound.setVolumen(cNoRefri.getVolumen());
                    cFound.setDescripcionMerc(cNoRefri.getDescripcionMerc());
                    cFound.setEstado(cNoRefri.getEstado());
                    cFound.setTipoContenido(cNoRefri.getTipoContenido());
                    return;
                }
        }
    }
	
//ELIMINAR	

	
	 public void removeServicio(int id){
            for (int i=0; i<services.size(); i++){
                if (services.get(i).getId() == id){
                    services.remove(i);
                }
            }
        }
	
	public void EliminarContenedor( Object cont){
		for (int i=0; i<conte.size(); i++)
			if(conte.get(i)==cont)
			conte.remove(i);
	}
	
	public void EliminarProforma( Proforma proform){
		for (int i=0; i<proforms.size(); i++)
			if(proforms.get(i)==proform) 
			proforms.remove(i);
        }
	
    public ArrayList<Servicio> queryByNS(String cad) {
         DAOFactura daofactura = DAOFactura.createFactura(DB_TYPE);
            DAOServicio daoServicio = daofactura.getDAOServicio();
            return daoServicio.queryByNS(cad);
    }

  

   
	
        
	
	
	
}